package com.zwz.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zwz.bean.NewsInfo;
import com.zwz.controller.util.Result;
import com.zwz.service.NewsInfoService;
import org.apache.logging.log4j.util.Strings;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author Alysia
 * @date 2022/11/9 11:28
 * @description 新闻相关控制器类
 */

@RestController
@RequestMapping("/news")
public class NewsController {

    @Resource
    private NewsInfoService newsInfoService;

    /**
     * 添加一条新闻信息
     *
     * @param newsInfo 新闻信息
     * @return 操作是否成功
     */
    @PostMapping("/insert")
    public Result insert(@RequestBody NewsInfo newsInfo) {
        if (newsInfoService.save(newsInfo)) {
            return Result.success("发布成功！");
        } else {
            return Result.error("服务器错误!");
        }
    }

    /**
     * 删除一条新闻数据
     *
     * @param newsId 新闻数据的ID
     * @return 操作是否成功
     */
    @DeleteMapping("/delete/{newsId}")
    public Result delete(@PathVariable Integer newsId) {
        if (newsInfoService.removeById(newsId)) {
            return Result.success("删除成功！");
        } else {
            return Result.error("服务器错误！");
        }
    }

    /**
     * 更新新闻信息
     *
     * @param newsInfo 更新后的数据
     * @return 操作是否成功
     */
    @PutMapping("/update")
    public Result update(@RequestBody NewsInfo newsInfo) {
        if (newsInfoService.updateById(newsInfo)) {
            return Result.success("修改成功！");
        } else {
            return Result.error("服务器错误！");
        }
    }

    /**
     * 展示某一条数据
     *
     * @param newsId 新闻id
     * @return 一条新闻数据
     */
    @GetMapping("/show/{newsId}")
    public Result show(@PathVariable Integer newsId) {
        NewsInfo newsInfo = newsInfoService.getById(newsId);
        return Result.success(newsInfo);
    }

    /**
     * 分页查询相关
     *
     * @param currentPage 当前页码
     * @param pageSize    每页条数
     * @param newsInfo    查询条件
     * @return 一页新闻数据
     */
    @GetMapping("/page/{currentPage}/{pageSize}")
    public Result page(@PathVariable int currentPage, @PathVariable int pageSize, NewsInfo newsInfo) {
        IPage<NewsInfo> page = new Page<>(currentPage, pageSize);
        LambdaQueryWrapper<NewsInfo> lqw = new LambdaQueryWrapper<>();
        lqw.like(Strings.isNotEmpty(newsInfo.getNewsTitle()), NewsInfo::getNewsTitle, newsInfo.getNewsTitle());
        lqw.eq(Strings.isNotEmpty(newsInfo.getNewsType()), NewsInfo::getNewsType, newsInfo.getNewsType());

        return Result.success(newsInfoService.page(page, lqw));
    }
}
